package MyDependence;

import com.myioc.myfilter.MyFilter;

import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.concurrent.ConcurrentHashMap;

public class MyDOA {
    /*
      通过反射获取这类的所有的属性
      获取属性上的所有的注解
      如果存在该注解，在自动加载的Map中获得该属性的具体实列
      返回该实列
     */

    /**
     * 传入object，通过反射获取object中的属性
     * 如果里面的属性带有注解，我们就会将容器对应的属性取出
     * 然后Set于object中的属性
     * @param object
     * @param beans
     */
    public static  void getProperty(Object object, ConcurrentHashMap<String,Object> beans){
        Class<?> objectClass= object.getClass();
        Field[] declaredFields = objectClass.getDeclaredFields();
        //循环遍历出fields   object中的属性
        Arrays.stream(declaredFields).filter(MyFilter::isEnumAnnotation).forEach(field -> {
            //获得拥有注解的属性名
            String fieldName=field.getName();
            //在之前的容器化管理容器中获得该属性的实例对象
            Object mybean= beans.get(fieldName);
            try {
                field.setAccessible(true);
                field.set(object,mybean);
            } catch (IllegalAccessException e) { e.printStackTrace(); }
        });
    }

}
